"""
生成器相关的方法
"""

from itertools import islice

from my_typing import *


def chunk_iterable(
    iterable: Iterable,
    chunk_size: int,
) -> Generator[list, Any, None]:
    """
    将可迭代对象按指定大小分割成多个生成器

    Args:
        iterable: 可迭代对象
        chunk_size: 每个列表的大小

    Returns:
        分割后的生成器
    """

    while chunk := list(islice(iterable, chunk_size)):
        yield chunk


def get_iterable_length(iterable: Iterable) -> tuple[int, Iterator]:
    """
    获取可迭代对象的长度

    Args:
        iterable: 可迭代对象

    Returns:
        (可迭代对象的长度, 生成器)
    """

    items: list = list(iterable)  # 这会消耗生成器
    length: int = len(items)
    new_generator: Iterator = (i for i in items)

    return length, new_generator
